home *** CD-ROM | disk | FTP | other *** search
/ Enter 2006 October / Enter 10 2006.iso / Uzytki / Spiceworks Desktop 0.8.34 Beta / Spiceworks.exe / ruby / bin / gem_mirror < prev    next >
Encoding:
Text File  |  2006-05-26  |  1.6 KB  |  68 lines

  1. #! c:/InstantRails/ruby/bin/ruby
  2.  
  3. # sample ~/.gemmirrorc:
  4. #--- 
  5. #- 
  6. #  from: http://gems.rubyforge.org/
  7. #  to: /Users/glasser/MyGEMS/gems.rubyforge.org
  8.  
  9. require 'yaml'
  10. require 'rubygems'
  11. require 'open-uri'
  12.  
  13. config_file = File.join(Gem.user_home, '.gemmirrorrc')
  14.  
  15. raise "Config file #{config_file} not found" unless File.exist?(config_file)
  16.  
  17. mirrors = YAML.load_file(config_file)
  18.  
  19. mirrors.each do |mir|
  20.   raise "mirror missing 'from' field" unless mir.has_key?('from')
  21.   raise "mirror missing 'to' field" unless mir.has_key?('to')
  22.   
  23.   get_from = mir['from']
  24.   save_to = mir['to']
  25.  
  26.   raise "Directory not found: #{save_to}" unless File.exist?(save_to)
  27.   raise "Not a directory: #{save_to}" unless File.directory?(save_to)
  28.  
  29.   gems_dir = save_to + "/gems"
  30.   if File.exist?(gems_dir)
  31.     raise "Not a directory: #{gems_dir}" unless File.directory?(gems_dir)
  32.   else
  33.     Dir.mkdir(gems_dir)
  34.   end
  35.  
  36.   sourceindex_text = ''
  37.  
  38.   open(get_from + "/yaml", "r") do |y|
  39.     sourceindex_text = y.read
  40.     open(save_to + "/yaml", "wb") do |out|
  41.       out.write(sourceindex_text)
  42.     end
  43.   end
  44.  
  45.   sourceindex = YAML.load(sourceindex_text)
  46.  
  47.   sourceindex.each do |fullname, gem|
  48.     gem_file = fullname + '.gem'
  49.     unless File.exists?(gems_dir + "/" + gem_file) 
  50.       puts "fetching: " + gem_file
  51.     
  52.       begin
  53.         open(get_from + "/gems/" + gem_file, "r") do |g|
  54.           contents = g.read
  55.           open(gems_dir + "/" + gem_file, "wb") do |out|
  56.             out.write(contents)
  57.           end
  58.         end
  59.       rescue
  60.         old_gf = gem_file
  61.         gem_file = gem_file.downcase
  62.         retry if old_gf != gem_file
  63.         puts $!
  64.       end
  65.     end
  66.   end
  67. end
  68.